#include <iostream>

// 饿汉模式--以时间换空间，在程序一启动就被初始化好了
// class Singleton
// {
// private:
//     Singleton() : _data(99)
//     {
//         std::cout << "单例对象创建" << std::endl;
//     }
//     Singleton(const Singleton &) = delete;
//     Singleton &operator=(const Singleton &) = delete;
//     ~Singleton() {}

// private:
//     int _data;
//     static Singleton _eton;

// public:
//     static Singleton &getInstance()
//     {
//         return _eton;
//     }

//     int getData()
//     {
//         return _data;
//     }
// };

// Singleton Singleton::_eton;

// 懒汉模式--懒加载，第一次使用的时候才创建对象
class Singleton
{
private:
    Singleton() : _data(99)
    {
        std::cout << "单例对象创建" << std::endl;
    }
    Singleton(const Singleton &) = delete;
    Singleton &operator=(const Singleton &) = delete;
    ~Singleton() {}

private:
    int _data;

public:
    static Singleton &getInstance()
    {

        static Singleton _eton;
        return _eton;
    }

    int getData()
    {
        return _data;
    }
};

int main()
{
    // std::cout<<Singleton::getInstance().getData()<<std::endl;
    return 0;
}
